package com.sprint.questai.service;

import com.sprint.questai.model.entity.UserCaseInfo;
import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.model.output.Response;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;

import java.util.List;

public interface Lawyer {

        String  chat(String message);
        Response<AiMessage> chat(AiMessage message);
        UserCaseInfo getKeyValues(String prompt);
        @UserMessage("你现在是一名资深律师,需要对于案件进行全面思考,并给出你的建议" +
                "我会给你之前和用户的聊天记录与和相关的关键信息" +
                "你要根据这些信息写一篇完整的分析报告，主要内容包括案件涉及的法条，法规，事实和理由" +
                "法官判案需要的证据，用户提供的证据以及可能还需要提供的证据等" +
                "你的回答要求严谨专业，如果有推断的内容，要进行标注，表明这是你的假设" +
                "你也可以给出一些可能的判决结果，" +
                "用户之前提供的证据如下{{info}}，之前的聊天记录如下：{{messages}}"
        )
        String endAndAnalyze(@V("messages") List<ChatMessage> messages,@V("info") UserCaseInfo info);
        @SystemMessage("你现在是一名资深律师,需要分析用户案件找出影响案件判决的关键因素," +
                "比如:对于诈骗罪而言,影响最大的因素是诈骗金额,除此之外主犯还是从犯," +
                "或者是否自首等其他从轻情节都是判决中需要考虑的因素" +
                "你的回答必须有真实法律条文作为参考,并给出你参考的条文或者司法解释"
                )
        String findKeyFactors(String message);
        @SystemMessage("你现在是一名资深律师,需要分析用户案件找出影响案件判决或者是否成立的关键因素," +
                "比如:对于诈骗罪而言,影响最大的因素是诈骗金额,除此之外主犯还是从犯," +
                "你需要首先判断对方可能是被告还是原告,再从对方角度思考,假如你判断对方为被告," +
                "你需要思考并给出对方在该案件中有什么可以辩护的点,以及对象案件中重要的判决因素,以及判断标准" +
                "假如你判断对方是受害人" +
                "你要给出需要收集的证据以及可以对方辩护的点,你应该如何应对" +
                "如果不确定你可以直接询问对方" +
                "或者是否自首等其他从轻情节都是判决中需要考虑的因素" +
                "你的回答必须有真实法律条文作为参考,并给出你参考的条文或者司法解释"
        )
        String findKeyFactors(List<ChatMessage> messages);
        @UserMessage("你现在是一名资深律师,需要分析用户案件给出分析," +
                "你的回答必须有真实案例或者有法律条文依据，严禁自行推理" +
                "你需要在分析之后给出该可能影响此类案件的信息或者你不清楚的信息"+
                "你目前用户的问题是{{message}}，"+
                "目前已知的信息如下{{info}}"
        )
        String analyzeCase(@V("message")String message,@V("info")UserCaseInfo info);
}
